/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AccessLayer;

import XMLStuff.XMLBlob;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.xml.ws.soap.MTOMFeature;
import webservice.AuctionProdukt;
import webservice.Hib;
import webservice.HibService;
import webservice.Produkt;
import webservice.ProduktArray;
import webservice.User;

/**
 *
 * @author Marco
 */
public class WebService extends AccessLayer {


        HibService service = new HibService();
        Hib hib ;

    public WebService() {
        hib = service.getHibPort(new MTOMFeature(true));
    }


    @Override
    public int bid(int auctionId, int userId, int amount) {
       return hib.bid(auctionId, userId, amount);
    }

    @Override
    public void changePassword(String password, int userId) {
        hib.changePassword(password, userId);
    }

    @Override
    public void changeUsername(String name, int userId) {
        hib.changeUsername(name, userId);
    }

    @Override
    public String checkPassword(String user, String password) {
        return hib.checkPassword(user, password);
    }

    @Override
    public String checkUser(String user) {
        return hib.checkUser(user);
    }


    @Override
    public void deleteItem(Produkt p) {
        hib.deleteItem(p);
    }


    @Override
    public void deleteUser(User u) {
        hib.deleteUser(u);
    }

    @Override
    public AuctionProdukt[] getAuctionItemList() {
        AuctionProdukt[] auctionProducts =  hib.getAuctionItemList().getItem().toArray(new webservice.AuctionProdukt[0]);
        return auctionProducts;
        
    }

    @Override
    public int getGuthaben(int userId) {
        return hib.getGuthaben(userId);
    }

    @Override
    public synchronized String getPasswordHash(int userId) {
        return hib.getPasswordHash(userId);
    }

    @Override
    public int getProduktStatistik(int iD) {
        return hib.getProduktStatistik(iD);
    }

    @Override
    public Produkt[] getProdukte() {
        List<Produkt> products = new ArrayList<Produkt>();
        for (webservice.Produkt p : hib.getProdukte().getItem().toArray(new webservice.Produkt[0])) {
            products.add(p);
        }
        return products.toArray(new Produkt[0]);
    }

    @Override
    public Produkt[] getProdukteByUserId(int userId) {
        List<Produkt> products = new ArrayList<Produkt>();
        for (webservice.Produkt p : hib.getProdukteByUserId(userId).getItem().toArray(new webservice.Produkt[0])) {
            products.add(p);
        }
        return products.toArray(new Produkt[0]);
    }

    @Override
    public String getRank(int userId) {
        return hib.getRank(userId);
    }

    @Override
    public int getRankCount() {
        return hib.getRankCount();
    }

    @Override
    public String getRegisterDate(int userId) {
        return hib.getRegisterDate(userId);
    }

    @Override
    public int getUmsatzProTag(int userId) {
        return hib.getUmsatzProTag(userId);
    }

    @Override
    public int getUserId(String user, String password) {
        return hib.getUserId(user, password);
    }

    @Override
    public User[] getUserList() {
        ArrayList<User> u = new ArrayList<User>();
        List<webservice.User> item = hib.getUserList().getItem();

        for (webservice.User user : item) {
            u.add(user);
        }
        return u.toArray(new User[0]);

    }

    @Override
    public String getUserName(int userId) {
        return hib.getUserName(userId);
    }

    @Override
    public boolean isAdmin(int userId) {
        return hib.isAdmin(userId);
    }

    @Override
    public void newUser(String username, String password) {
        hib.newUser(username, password);
    }

    @Override
    public int produce(Produkt p, int amount, int userId) {
        return hib.produce(p, amount, userId);
    }

    @Override
    public void refresh() {
        hib.refresh();
    }

    @Override
    public void saveItem(Produkt p) {
        hib.saveItem(p);
    }

    @Override
    public Produkt[] searchItemName(String name) {
        List<Produkt> products = new ArrayList<Produkt>();
        for (webservice.Produkt p : hib.searchItemName(name).getItem().toArray(new webservice.Produkt[0])) {
            products.add(p);
        }
        return products.toArray(new Produkt[0]);
    }

    @Override
    public Produkt[] searchItemPrice(int preis) {
        List<Produkt> products = new ArrayList<Produkt>();
        for (webservice.Produkt p : hib.searchItemPrice(preis).getItem().toArray(new webservice.Produkt[0])) {
            products.add(p);
        }
        return products.toArray(new Produkt[0]);
    }

    @Override
    public Produkt[] searchItemPriceAndName(String name, int preis) {
        List<Produkt> products = new ArrayList<Produkt>();
        for (webservice.Produkt p : hib.searchItemPriceAndName(name, preis).getItem().toArray(new webservice.Produkt[0])) {
            products.add(p);
        }
        return products.toArray(new Produkt[0]);
    }

    @Override
    public int startAuction(Produkt p, int amount, int userId, int dauer) {
        return hib.startAuction(p, amount, userId, dauer);
    }

    @Override
    public int startAuctionAsAdmin(Produkt p, int amount, int userId, int dauer) {
        return hib.startAuctionAsAdmin(p, amount, userId, dauer);
    }

    @Override
    public void updateItem(Produkt p) {
        hib.updateItem(p);
    }

    @Override
    public void updateUser(User u) {
        hib.updateUser(u);
    }

    @Override
    public void writeSaveGameIntoDatabase(User createWebserviceUser, Produkt[] produkte) {
        ProduktArray produktArray = new ProduktArray();
        produktArray.getItem().addAll(Arrays.asList(produkte));
        hib.writeSaveGameIntoDatabase(createWebserviceUser,produktArray);
    }

    





}
